lexer grammar cFormatLexer;

options {
  language = Java;
}
@header {package PL.practica8;}


@members {

	ArrayList <RecognitionException> errores = new ArrayList<RecognitionException>();
	
	public boolean listaVacia (){
	    if (errores.isEmpty()){
	      return true;
	    }else
	      return false;
	}
	
	public ArrayList getListaErrores(){return errores;}
	
	
	@Override
	public void reportError (RecognitionException e){
	  System.err.println (getErrorMessage(e, getTokenNames()));
	  errores.add(e);
}

}

INT : 'int';
FLOAT : 'float';
CHAR : 'char';
VOID : 'void';
IF :'if';  
WHILE : 'while';
RETURN : 'return';
BREAK : 'break';
FOR : 'for';
PRINTF : 'printf';

fragment DIGITO: '0'..'9';
fragment LETRA : ('A'..'Z') | ('a'..'z') | '_';
fragment NUEVA_LINEA : '\r\n';
fragment TRUE :'true';
fragment  FALSE : 'false';
fragment COMILLAS : '\"';

 //TOKENS A FILTRAR 
  BLANCO: (' '|'\t'|NUEVA_LINEA) {skip();};
  COMENTARIO: '/*' (options {greedy=false;}:.)* '*/'{skip();};
  COMENTARIOlINEA : '//' (options { greedy=false; } : .)* NUEVA_LINEA{skip();};
  
// Tokens
BOOLEAN: (TRUE | FALSE);

ID : LETRA (LETRA | DIGITO)*;
NUMERO: DIGITO+;
CADENA : COMILLAS (options {greedy=false;}:.)* COMILLAS;
CARACTER : '\'' LETRA '\'';

MAS : '+';
MENOS : '-';
ASTERISCO : '*';
SLASH : '/';
OP_COMP : '==' | '!=' | '<=' | '>=' | '<' | '>';
OP_NOT : '!';
OP_AND : '&&';
OP_OR : '||';
INTERROGACION : '?';
ASIGNACION : '=';
ABRIRPARENTESIS : '(';
CERRARPARENTESIS : ')';
ABRIRCORCHETE : '[';
CERRARCORCHETE : ']';
ABRIRLLAVE: '{';
CERRARLLAVE: '}';
DOSPUNTOS : ':';
SEPARADOR : ';';
COMA : ',';
